package medialistfor_mobile

import (
	"gitlab.local/DO-module/new-filemanage-module/src/core/sqlitedb"

	"github.com/gogf/gf/errors/gerror"
	"gorm.io/gorm"
)

type Photo struct {
	PhotoId    int    `json:"photo_id" gorm:"type:integer;column:id;auto_increment;primary_key;not null;"` //id
	DetailID   int    `json:"detail_id" gorm:"type:int;column:detail_id;null"`                             //在DETAIL表单中的id
	Name       string `json:"name" gorm:"type:text;column:name;null"`                                      //名称
	Path       string `json:"path" gorm:"type:text;column:path;null"`                                      //路径
	Size       int    `json:"size" gorm:"type:int;column:size;null"`                                       //大小
	TimeStamp  int64  `json:"time_stamp" gorm:"column:timestamp;null"`                                     //时间戳
	Title      string `json:"title" gorm:"type:text;column:title;null"`                                    //标题
	Type       int    `json:"type" gorm:"type:int;column:type;null"`                                       //type（1:视频，0:photo）
	Duration   string `json:"duration" gorm:"type:text;column:duration;null"`                              //时长
	Creator    string `json:"creator" gorm:"type:text;column:creator;null"`                                //创建者
	Date       string `json:"date" gorm:"type:text;column:date;null"`                                      //日期
	Resolution string `json:"resolution" gorm:"type:text;column:resolution;null"`                          //分辨率
	Width      int    `json:"width" gorm:"type:int;column:width;null"`                                     //宽
	Height     int    `json:"height" gorm:"type:int;column:height;null"`                                   //高
	GPSInfo    string `json:"gps_info" gorm:"type:text;column:gpsinfo;null"`                               //GPS坐标
	Rotation   int    `json:"rotation" gorm:"type:int;column:rotation;null"`
	FaceID     string `json:"face_id" gorm:"type:text;column:faceid;null"`
	ObjectID   string `json:"object_id" gorm:"type:text;column:obid;null"`
	SceneID    string `json:"scene_id" gorm:"type:text;column:sceneid;null"`
	Comment    string `json:"comment" gorm:"type:text;column:comment;null"` //评论
	Remarks    string `json:"remarks" gorm:"type:text;column:remarks;null"` //其他记录
	//IsCollect  int       `json:"is_collect" gorm:"type:int;column:collect;null"` //是否被收藏 0-未收藏；1-被收藏
	//Album      string    `json:"album" gorm:"type:text;column:album;null"`       //所属相册
	//IsShare    int       `json:"is_share" gorm:"type:int;column:share;null"`     //是否被分享 0-未分享；1-已分享
}

type Music struct {
	MusicId   int    `json:"music_id" gorm:"type:integer;column:id;auto_increment;primary_key;not null;"` //id
	DetailID  int    `json:"detail_id" gorm:"type:int;column:detail_id;null"`                             //在DETAIL表单中的id
	Name      string `json:"name" gorm:"type:text;column:name;null"`                                      //名称
	Path      string `json:"path" gorm:"type:text;column:path;null"`                                      //路径
	Size      int    `json:"size" gorm:"type:int;column:size;null"`                                       //大小
	TimeStamp int64  `json:"time_stamp" gorm:"column:timestamp;null"`                                     //时间戳
	Title     string `json:"title" gorm:"type:text;column:title;null"`                                    //标题
	Duration  string `json:"duration" gorm:"type:text;column:duration;null"`                              //时长
	Creator   string `json:"creator" gorm:"type:text;column:creator;null"`                                //作者
	Artist    string `json:"artist" gorm:"type:text;column:artist;null"`
	Album     string `json:"album" gorm:"type:text;column:album;null"`
	Genre     string `json:"genre" gorm:"type:text;column:genre;null"`
	Disc      int64  `json:"disc" gorm:"column:disc;null"`
	Track     int64  `json:"track" gorm:"column:track;null"`
	Date      string `json:"date" gorm:"type:text;column:date;null"` //日期
	AlbumArt  int    `json:"album_art" gorm:"type:date;column:album_art;null"`
}

type Video struct {
	VideoId    int    `json:"video_id" gorm:"type:integer;column:id;auto_increment;primary_key;not null;"` //id
	DetailID   int    `json:"detail_id" gorm:"type:int;column:detail_id;null"`                             //在DETAIL表单中的id
	Name       string `json:"name" gorm:"type:text;column:name;null"`                                      //名称
	Path       string `json:"path" gorm:"type:text;column:path;null"`                                      //路径
	Size       int    `json:"size" gorm:"type:int;column:size;null"`                                       //大小
	TimeStamp  int64  `json:"time_stamp" gorm:"column:timestamp;null"`                                     //时间戳
	Title      string `json:"title" gorm:"type:text;column:title;null"`                                    //标题
	Type       int    `json:"type" gorm:"type:int;column:type;null"`                                       //type（1:视频，0:photo）
	Duration   string `json:"duration" gorm:"type:text;column:duration;null"`                              //时长
	Creator    string `json:"creator" gorm:"type:text;column:creator;null"`                                //创建者
	Date       string `json:"date" gorm:"type:text;column:date;null"`                                      //日期
	Resolution string `json:"resolution" gorm:"type:text;column:resolution;null"`                          //分辨率
	Width      int    `json:"width" gorm:"type:int;column:width;null"`                                     //宽
	Height     int    `json:"height" gorm:"type:int;column:height;null"`                                   //高
	Rotation   int    `json:"rotation" gorm:"type:int;column:rotation;null"`
	Comment    string `json:"comment" gorm:"type:text;column:comment;null"` //评论
	Remarks    string `json:"remarks" gorm:"type:text;column:remarks;null"` //其他记录
}

type Documents struct {
	DocumentsId int    `json:"documents_id" gorm:"type:integer;column:id;auto_increment;primary_key;not null;"` //id
	Name        string `json:"name" gorm:"type:text;column:name;null"`                                          //名称
	Path        string `json:"path" gorm:"type:text;column:path;null"`                                          //路径
	Size        int64  `json:"size" gorm:"type:int;column:size;null"`                                           //大小
	Type        string `json:"type" gorm:"type:text;column:type;null"`                                          //type
	TimeStamp   int64  `json:"time_stamp" gorm:"column:timestamp;null"`                                         //时间戳
}

// type DocumentsEx struct {
// 	Documents
// 	Size int64 `json:"size" gorm:"type:int;column:size;null"`
// }

type List struct {
	Type string `json:"type"` // "photo"-照片 "music"-音乐 "video"-视频 "documents"-文档;"pdf";"doc";"xls";"ppt";"txt"
	Per  string `json:"per"`  // 当前显示多少条数据
	Page string `json:"page"` // 当前第几页
	Sort string `json:"sort"` // "name"-按名称排序 "time"-按时间排序
	Desc string `json:"desc"` // true-降序；false-升序
}

type FolderPath string //照片最底子目录-like: PhotoPath->"/Volume1/public/aaa/1.jpg",then: FolderPath->"/Volume1/public/aaa/"
type UserPermissionsInPath = map[FolderPath]PathToUserAcl

type PathToUserAcl struct {
	Username      string `json:"username"`       //用户名
	IsPermissions bool   `json:"is_permissions"` //用户是否允许查看图片
}

type Mobile struct {
	media *gorm.DB
	//AclGetter acl.FolderAttrService
}

func New() *Mobile {
	return &Mobile{}
}

func (mi *Mobile) start() error {
	var err error
	if mi.media == nil {
		mi.media, err = sqlitedb.MediaDB()
		if err != nil {
			return gerror.Wrap(err, "connection mediadb failed")
		}
	}
	return nil
}
